// admin/system/service/sys_config_service.go
package service

import (
	"errors"
	repo "go-admin1/admin/system/dao"

	"go-admin1/admin/system/model"
)

// SysConfigService 配置参数服务接口
type SysConfigService interface {
	Create(config *model.SysConfig) error
	GetByID(id int64) (*model.SysConfig, error)
	GetByKey(configKey string) (*model.SysConfig, error)
	Update(config *model.SysConfig) error
	Delete(id int64) error
	List(page, pageSize int) ([]*model.SysConfig, int64, error)
	ListAll() ([]*model.SysConfig, error)
}

type sysConfigService struct {
	configDao repo.SysConfigDao
}

func (s sysConfigService) Create(config *model.SysConfig) error {
	return s.configDao.Create(config)
}

func (s sysConfigService) GetByID(id int64) (*model.SysConfig, error) {
	config, err := s.configDao.GetByID(id)
	if err != nil {
		return nil, err
	}
	return config, nil
}

func (s sysConfigService) GetByKey(configKey string) (*model.SysConfig, error) {
	config, err := s.configDao.GetByKey(configKey)
	if err != nil {
		return nil, err
	}
	return config, nil
}

func (s sysConfigService) Update(config *model.SysConfig) error {
	existingConfig, err := s.configDao.GetByID(config.ConfigID)
	if err != nil {
		return err
	}
	if existingConfig == nil {
		return errors.New("配置参数不存在")
	}

	return s.configDao.Update(config)
}

func (s sysConfigService) Delete(id int64) error {
	existingConfig, err := s.configDao.GetByID(id)
	if err != nil {
		return err
	}
	if existingConfig == nil {
		return errors.New("配置参数不存在")
	}

	return s.configDao.Delete(id)
}

func (s sysConfigService) List(page, pageSize int) ([]*model.SysConfig, int64, error) {
	configs, total, err := s.configDao.List(page, pageSize)
	if err != nil {
		return nil, 0, err
	}
	return configs, total, nil
}

func (s sysConfigService) ListAll() ([]*model.SysConfig, error) {
	configs, err := s.configDao.ListAll()
	if err != nil {
		return nil, err
	}
	return configs, nil
}

// NewSysConfigService 创建配置参数服务实例
func NewSysConfigService() SysConfigService {
	return &sysConfigService{
		configDao: repo.NewSysConfigDao(),
	}
}
